using System;
using System.Collections.Generic;
using System.Text;

namespace Noein.GeneticAlgorithm.Final
{
    public delegate Object CrossOver(params Object[] parents);
    public delegate Object Mutate(Object parent);
    public delegate Object[] Select(int selectionSize, params Object[] objects);
    public delegate bool Terminate(params Object[] objects);
    public delegate float GetFitness(Object obj);

    public class Procedure //: Procedure<LispLib.Interpreter.Pair, Object, float>
    {
        //private Problem problem;
        //private GetFitness GetFitness;
        //private Select SelectForCross;
        //private Select SelectForMutate;
        //private Select SelectForNextGen;
        //private CrossOver Cross;
        //private Mutate Mutate;

        //public Procedure(
        //    Problem problem,
        //    GetFitness fitness,
        //    Select selectForCross,
        //    Select selectForMutate,
        //    Select selectForNextGen,
        //    CrossOver cross,
        //    Mutate mutate)
        //{
        //    this.problem = problem;
        //    GetFitness = fitness;
        //    SelectForCross = selectForCross;
        //    SelectForMutate = selectForMutate;
        //    SelectForNextGen = selectForNextGen;
        //    Cross = cross;
        //    Mutate = mutate;
        //}

        //public void Run(Population pop, Terminate IsDone)
        //{
        //    while (!IsDone(pop))
        //    {

        //    }
        //}

        //public Procedure(
        //    Problem problem, 
        //    Selection<TGenotype, TPhenotype, TOutput> selection,
        //    FitnessFunction<TOutput> fitnessFunction)
        //{
        //    this.problem = problem;
        //    this.selection = selection;
        //    TestFitness = fitnessFunction;
        //}
    }
}
